/*
 * To change this license header, choose License Headers in Project Properties.
 * To change this template file, choose Tools | Templates
 * and open the template in the editor.
 */
package br.jm.mala.view;

import br.jm.mala.entity.Atividade;
import br.jm.mala.lazyModel.GenericLazyDataModel;
import br.jm.mala.service.AtividadeService;
import java.io.Serializable;
import javax.faces.application.FacesMessage;
import javax.faces.context.FacesContext;
import javax.faces.event.ActionEvent;
import org.primefaces.model.LazyDataModel;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Scope;
import org.springframework.stereotype.Component;

/**
 *
 * @author joao
 */
@Component("atividadeView")
@Scope("view")
public class AtividadeView implements Serializable {

    private static final long serialVersionUID = 233067529147824573L;

    private final AtividadeService atividadeService;
    private LazyDataModel<Atividade> atividadeLazy;
    private Atividade selectedAtividade;
    private FacesMessage msg;

    @Autowired
    public AtividadeView(AtividadeService atividadeService) {
        this.atividadeService = atividadeService;

        atividadeLazy = new GenericLazyDataModel(atividadeService, null, null, "Atividade");

        selectedAtividade = new Atividade();
        MenuView.salvar = true;
    }

    public LazyDataModel<Atividade> getAtividadeLazy() {
        return atividadeLazy;
    }

    public void setAtividadeLazy(LazyDataModel<Atividade> atividadeLazy) {
        this.atividadeLazy = atividadeLazy;
    }

    public Atividade getSelectedAtividade() {
        return selectedAtividade;
    }

    public void setSelectedAtividade(Atividade selectedAtividade) {
        this.selectedAtividade = selectedAtividade;
    }

    public void preparaInserir(ActionEvent event) {
        MenuView.salvar = true;
        this.selectedAtividade = new Atividade();
    }

    public void inserir(ActionEvent actionEvent) {
        msg = null;

        try {
            this.selectedAtividade.setIdAtividade(null);
            this.atividadeService.create(selectedAtividade);

            msg = new FacesMessage(FacesMessage.SEVERITY_INFO, "Ramo de Atividade Inserido com Sucesso", this.selectedAtividade.getDescMix());
        } catch (Exception e) {
            msg = new FacesMessage(FacesMessage.SEVERITY_ERROR, "Erro ao Inserir", this.selectedAtividade.getDescMix());
        } finally {
            preparaInserir(actionEvent);
            FacesContext.getCurrentInstance().addMessage(null, msg);
        }
    }

    public void alterar(ActionEvent actionEvent) {
        msg = null;
        try {
            /*
            // Obtém uma instância de CEPService
            CEPService buscaCEP = CEPServiceFactory.getCEPService();
            // Obtém um CEP pelo número
            CEP cep = buscaCEP.obtemPorNumeroCEP("12232210");
            // Obtém todos os CEPs que contém "Flordalisa" no logradouro
            List<CEP> ceps = buscaCEP.obtemPorEndereco("alipio ferreira");
                    */
            this.atividadeService.edit(selectedAtividade);
            msg = new FacesMessage(FacesMessage.SEVERITY_INFO, "Ramo de Atividade Alterado com Sucesso", this.selectedAtividade.getDescMix());
        } catch (Exception e) {
            msg = new FacesMessage(FacesMessage.SEVERITY_ERROR, "Erro ao Alterar", this.selectedAtividade.getDescMix());
        } finally {
            preparaInserir(actionEvent);
            FacesContext.getCurrentInstance().addMessage(null, msg);
        }
    }

    public void excluir(ActionEvent actionEvent) {
        msg = null;

        try {
            this.atividadeService.destroy(selectedAtividade);

            msg = new FacesMessage(FacesMessage.SEVERITY_INFO, "Ramo de Atividade Excluido com Sucesso", this.selectedAtividade.getDescMix());
        } catch (Exception e) {
            msg = new FacesMessage(FacesMessage.SEVERITY_WARN, "Erro ao Excluir: " + this.selectedAtividade.getDescMix(), "RAMO DE ATIVIDADE SENDO UTILIZADO EM ALGUM PROCESSO!");
        } finally {
            preparaInserir(actionEvent);
            FacesContext.getCurrentInstance().addMessage(null, msg);
        }
    }
}
